﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WpfApplication2.Helpers;
using System.Windows.Input;
using WpfApplication2.UserControls;
using System.Windows.Controls;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.Views.Afiliado;

namespace WpfApplication2.ViewModels.Afiliado
{
    public class BuscarAfiliadoViewModel : ViewModel
    {
        #region properties

        public string DeleteEnabledSource = "../../Images/delete_btn_hover.png";
        public string DeleteDisabledSource = "../../Images/delete_btn.png";

        public SindicatoWebService.Service1SoapClient WS;
        public Frame ContainerFrame
        {
            get;
            set;
        }
        public ModalDialog modalDialog
        {
            get;
            set;
        }
        public BajaAfiliadoDialog bajaAfiliadoDialog
        {
            get;
            set;
        }

        public string NroInternoTitular
        {
            get
            {
                return nroInternoTitular;
            }
            set
            {
                if (nroInternoTitular != value)
                {
                    nroInternoTitular = value;
                    RaisePropertyChanged("NroInternoTitular");
                }
            }
        }
        private string nroInternoTitular;

        public string NroDocumento
        {
            get
            {
                return nroDocumento;
            }
            set
            {
                if (nroDocumento != value)
                {
                    nroDocumento = value;
                    RaisePropertyChanged("NroDocumento");
                }
            }
        }
        private string nroDocumento;

        public string Nombre
        {
            get
            {
                return nombre;
            }
            set
            {
                if (nombre != value)
                {
                    nombre = value;
                    RaisePropertyChanged("Nombre");
                }
            }
        }
        private string nombre;

        public string Apellido
        {
            get
            {
                return apellido;
            }
            set
            {
                if (apellido != value)
                {
                    apellido = value;
                    RaisePropertyChanged("Apellido");
                }
            }
        }
        private string apellido;

        public AfiliadoDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private AfiliadoDTO[] resultados;


        public AfiliadoDTO Afiliado
        {
            get
            {
                return afiliado;
            }
            set
            {
                if (afiliado != value)
                {
                    afiliado = value;
                    RaisePropertyChanged("Afiliado");
                }
            }
        }
        private AfiliadoDTO afiliado;


        public Visibility ResultsVisibility
        {
            get
            {
                return resultsVisibility;
            }
            set
            {
                if (resultsVisibility != value)
                {
                    resultsVisibility = value;
                    RaisePropertyChanged("ResultsVisibility");
                }
            }
        }
        private Visibility resultsVisibility;

        public Visibility ResultsListVisibility
        {
            get
            {
                return resultsListVisibility;
            }
            set
            {
                if (resultsListVisibility != value)
                {
                    resultsListVisibility = value;
                    RaisePropertyChanged("ResultsListVisibility");
                }
            }
        }
        private Visibility resultsListVisibility;

        public Visibility NoResultsVisibility
        {
            get
            {
                return noResultsVisibility;
            }
            set
            {
                if (noResultsVisibility != value)
                {
                    noResultsVisibility = value;
                    RaisePropertyChanged("NoResultsVisibility");
                }
            }
        }
        private Visibility noResultsVisibility;

        //public string NroTitularSource
        //{
        //    get
        //    {
        //        return nroTitularSource;
        //    }
        //    set
        //    {
        //        if (nroTitularSource != value)
        //        {
        //            nroTitularSource = value;
        //            RaisePropertyChanged("NroTitularSource");
        //        }
        //    }
        //}
        //private string nroTitularSource;

        //public string DocumentoSource
        //{
        //    get
        //    {
        //        return documentoSource;
        //    }
        //    set
        //    {
        //        if (documentoSource != value)
        //        {
        //            documentoSource = value;
        //            RaisePropertyChanged("DocumentoSource");
        //        }
        //    }
        //}
        //private string documentoSource;

        //public string NombreSource
        //{
        //    get
        //    {
        //        return nombreSource;
        //    }
        //    set
        //    {
        //        if (nombreSource != value)
        //        {
        //            nombreSource = value;
        //            RaisePropertyChanged("NombreSource");
        //        }
        //    }
        //}
        //private string nombreSource;

        //public string ApellidoSource
        //{
        //    get
        //    {
        //        return apellidoSource;
        //    }
        //    set
        //    {
        //        if (apellidoSource != value)
        //        {
        //            apellidoSource = value;
        //            RaisePropertyChanged("ApellidoSource");
        //        }
        //    }
        //}
        //private string apellidoSource;


        #endregion

        public BuscarAfiliadoViewModel(Frame frame, ModalDialog modal, BajaAfiliadoDialog bajaDialog)
        {
            WS = new Service1SoapClient();
            ContainerFrame = frame;
            modalDialog = modal;
            bajaAfiliadoDialog = bajaDialog;
            ResultsVisibility = Visibility.Collapsed;
            //NroTitularSource = DeleteDisabledSource;
            //DocumentoSource = DeleteDisabledSource;
            //NombreSource = DeleteDisabledSource;
            //ApellidoSource = DeleteDisabledSource;
        }


        #region Buscar Afiliado

        private DelegateCommand buscarAfiliado;

        public ICommand BuscarAfiliado
        {
            get
            {
                if (buscarAfiliado == null)
                {
                    buscarAfiliado = new DelegateCommand(Buscar, CanExecute);
                }
                return buscarAfiliado;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void Buscar()
        {
            if (string.IsNullOrEmpty(NroInternoTitular) && string.IsNullOrEmpty(Nombre) && string.IsNullOrEmpty(Apellido) && string.IsNullOrEmpty(NroDocumento))
            {
                modalDialog.ShowHandlerDialog(String.Format("Debe completar al menos un campo para iniciar la búsqueda"));
            }
            else
            {
                if (!string.IsNullOrEmpty(NroInternoTitular))
                    Resultados = WS.BuscarAfilByNroInterno(NroInternoTitular);
                
                if (!string.IsNullOrEmpty(NroDocumento))
                    Resultados = WS.BuscarAfilByNroDocumento(NroDocumento);
                
                if (!string.IsNullOrEmpty(Nombre) || !string.IsNullOrEmpty(Apellido))
                    Resultados = WS.BuscarAfilByNombre(FormatHelper.AllWordsToUpper(Nombre),FormatHelper.AllWordsToUpper(Apellido));
                
                
                ResultsVisibility = Visibility.Visible;
                if (Resultados.Count() > 0)
                {
                    ResultsListVisibility = Visibility.Visible;
                    NoResultsVisibility = Visibility.Collapsed;
                }
                else
                {
                    ResultsListVisibility = Visibility.Collapsed;
                    NoResultsVisibility = Visibility.Visible;
                }
            }
        }

        #endregion


        #region Editar Afiliado

        private DelegateCommand editarAfiliado;

        public ICommand EditarAfiliado
        {
            get
            {
                if (editarAfiliado == null)
                {
                    editarAfiliado = new DelegateCommand(Editar, CanExecute);
                }
                return editarAfiliado;
            }
        }

        private void Editar()
        {
            ContainerFrame.Content = new EditarAfiliado(ContainerFrame, modalDialog, bajaAfiliadoDialog, Afiliado);
        }

        #endregion


        #region Consultar Afiliado

        private DelegateCommand consultarAfiliado;

        public ICommand ConsultarAfiliado
        {
            get
            {
                if (consultarAfiliado == null)
                {
                    consultarAfiliado = new DelegateCommand(Consultar, CanExecute);
                }
                return consultarAfiliado;
            }
        }

        private void Consultar()
        {
            ContainerFrame.Content = new ConsultarAfiliado(ContainerFrame, modalDialog, Afiliado);
        }

        #endregion
    }
}
